/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ADT;
import Interfaces.Bounded3DimStack;
import Interfaces.BoundingBox;
import Interfaces.Container;
import Interfaces.Entity;
import Interfaces.Mass;
import Interfaces.Pallet;
import Interfaces.StowageLocation;

/**
 *
 * @author markusbaisch
 */
public final class Entities implements Entity {
    // Konstanten
    public static final BoundingBox BOUNDINGBOX_20FT            = Values.boundingBox( 6.058, 2.438, 2.591 );
    public static final BoundingBox BOINDINGBOX_EURO_PALETTE    = Values.boundingBox( 1.2, 0.8, 2.0 );
    public static final Mass        MASS_EMPTY_20FT             = Values.MassInKG( 2250.0 );
    public static final Mass        MASS_MAX_20FT               = Values.MassInKG( 24000.0 );
    public static final Mass        MASS_ZERO                   = Values.MassInKG( 0.0 );
    
    // Null-Location
    public static StowageLocation nullLocation() {
        return NullLocationImpl.valueOf();
    }

    // Null-Container
    public static Container nullContainer() {
        return NullContainerImpl.valueOf( BOUNDINGBOX_20FT );
    }

    // Null-Palette
    public static Pallet nullPallet() {
        return NullPalletImpl.valueOf( BOINDINGBOX_EURO_PALETTE );
    }

    // Leeren 20 FT Container bauen
    public static Container container() {
        return ContainerImpl.valueOf( MASS_EMPTY_20FT, MASS_EMPTY_20FT, MASS_MAX_20FT, BOUNDINGBOX_20FT );
    }

    // Einen Container mit Gewicht
    public static Container container(Mass mass) {
        return ContainerImpl.valueOf( mass, MASS_EMPTY_20FT, MASS_MAX_20FT, BOUNDINGBOX_20FT );
    }

    // Eine Location
    public static StowageLocation stowageLocation(int bayNo, int rowNo, int tierNo) {
        return StowageLocationImpl.valueOf(bayNo, rowNo, tierNo);
    }

    // einen Stapel
    public static Bounded3DimStack stack(StowageLocation loc) {
        return Bounded3DimStackImpl.valueOf(loc);
    }
}
